package org.dydl.controller.system;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dydl.common.dto.Menu;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//import lombok.Setter;

@RestController
@RequestMapping("/main")
public class HomeController {
	// @Autowired
	// private ISysUserService userService;
	//
	// @Autowired
	// private ISysRightsService rightsService;

	@RequestMapping("/username")
	public String getCurrentUsername() {
		return SecurityContextHolder.getContext().getAuthentication().getName();
	}

	@RequestMapping("/menu")
	public List<Object> getMenu() {
		List<Object> rl = new ArrayList<>();
		// SysUser user = ((List<SysUser>) userService.search(new
		// Search().addFilterEqual("userName",
		// SecurityContextHolder.getContext().getAuthentication().getName())).getData()).get(0);
		// List<Menu> list =
		// rightsService.queryAuthorizeByUserId(user.getId().toString());

		List<Menu> list = getMenus();
		// List<Menu> list = (List<Menu>)
		// rightsService.queryAuthorizeByUserId(user.getId().toString()).getData();
		Collections.sort(list, new MenuIdComparator());
		for (Menu m1 : list) {
			Map<String, Object> params = new HashMap<>();
			params.put("id", m1.getMenuId());
			params.put("homePage", m1.getHomePage());
			params.put("menuName", m1.getMenuName());

			if (m1.getChildMenus() != null) {
				List<Object> ml = new ArrayList<>();
				if (m1.getChildMenus() != null) {
					Collections.sort(m1.getChildMenus(), new MenuIdComparator());
					for (Menu m2 : m1.getChildMenus()) {
						List<Object> items = new ArrayList<>();
						Map<String, Object> m = new HashMap<>();
						m.put("text", m2.getMenuName());
						if (m2.getChildMenus() != null) {
							Collections.sort(m2.getChildMenus(), new MenuIdComparator());
							for (Menu m3 : m2.getChildMenus()) {
								Map<String, Object> map = new HashMap<>();
								map.put("id", m3.getMenuId());
								map.put("text", m3.getMenuName());
								map.put("href", m3.getUrl());
								items.add(map);
							}
						}

						m.put("items", items);
						ml.add(m);
					}
				}

				params.put("menu", ml);
			} else {
				params.put("menu", new ArrayList<>());
			}
			rl.add(params);

		}
		return rl;
	}

	static class MenuIdComparator implements Comparator<Object> {
		public int compare(Object obj1, Object obj2) {
			Menu m1 = (Menu) obj1;
			Menu m2 = (Menu) obj2;
			return new Integer(m1.getMenuId()).compareTo(new Integer(m2.getMenuId()));
		}
	}

	private List<Menu> getMenus() {
		List<Menu> menuList = new ArrayList<Menu>();
		// 系统管理子菜单集合
		List<Menu> xtglList = new ArrayList<Menu>();
		// 系统设置子菜单集合
		List<Menu> xtszList = new ArrayList<Menu>();
		List<Menu> xtsz1List = new ArrayList<Menu>();
		// 系统管理
		Menu xtgl = new Menu();
		xtgl.setHomePage("101");
		xtgl.setId("29");
		xtgl.setLevel("1");
		xtgl.setMenuId("1");
		xtgl.setMenuName("系统管理");
		xtgl.setParentId("0");
		xtgl.setUrl("1");
		// 系统设置
		Menu xtsz = new Menu();
		xtsz.setHomePage("");
		xtsz.setId("30");
		xtsz.setLevel("2");
		xtsz.setMenuId("10");
		xtsz.setMenuName("系统设置");
		xtsz.setParentId("29");
		xtsz.setUrl("10");
		// 角色管理
		Menu jsgl = new Menu();
		jsgl.setHomePage("");
		jsgl.setId("34");
		jsgl.setLevel("3");
		jsgl.setMenuId("102");
		jsgl.setMenuName("角色管理");
		jsgl.setParentId("30");
		jsgl.setUrl("index.html#!/102");
		jsgl.setChildMenus(null);
		xtszList.add(jsgl);
		
		Menu spzl = new Menu();
		spzl.setHomePage("");
		spzl.setId("60");
		spzl.setLevel("3");
		spzl.setMenuId("105");
		spzl.setMenuName("商品资料");
		spzl.setParentId("30");
		spzl.setUrl("commodity.html#!/105");
		spzl.setChildMenus(null);
		xtszList.add(spzl);
		// 职员管理
		Menu zygl = new Menu();
		zygl.setHomePage("");
		zygl.setId("35");
		zygl.setLevel("3");
		zygl.setMenuId("101");
		zygl.setMenuName("职员管理");
		zygl.setParentId("30");
		zygl.setUrl("index.html#!/101");
		zygl.setChildMenus(null);
		xtszList.add(zygl);
		// 组织机构
		Menu zzjg = new Menu();
		zzjg.setHomePage("");
		zzjg.setId("36");
		zzjg.setLevel("3");
		zzjg.setMenuId("103");
		zzjg.setMenuName("组织机构");
		zzjg.setParentId("30");
		zzjg.setUrl("index.html#!/103");
		zzjg.setChildMenus(null);
		xtszList.add(zzjg);
//		// 品名库字段权限
//		Menu pmkzdqx = new Menu();
//		pmkzdqx.setHomePage("");
//		pmkzdqx.setId("47");
//		pmkzdqx.setLevel("3");
//		pmkzdqx.setMenuId("104");
//		pmkzdqx.setMenuName("品名库字段权限");
//		pmkzdqx.setParentId("30");
//		pmkzdqx.setUrl("index.html#!/104");
//		pmkzdqx.setChildMenus(null);
//		xtszList.add(pmkzdqx);
		Menu xtsz1 = new Menu();
		xtsz1.setHomePage("");
		xtsz1.setId("37");
		xtsz1.setLevel("2");
		xtsz1.setMenuId("11");
		xtsz1.setMenuName("系统设置");
		xtsz1.setParentId("29");
		xtsz1.setUrl("11");
		// 数据字典
		Menu sjzd = new Menu();
		sjzd.setHomePage("");
		sjzd.setId("38");
		sjzd.setLevel("3");
		sjzd.setMenuId("110");
		sjzd.setMenuName("数据字典");
		sjzd.setParentId("37");
		sjzd.setUrl("index.html#!/110");
		sjzd.setChildMenus(null);
		xtsz1List.add(sjzd);
		// 操作历史
		Menu czls = new Menu();
		czls.setHomePage("");
		czls.setId("39");
		czls.setLevel("3");
		czls.setMenuId("111");
		czls.setMenuName("操作历史");
		czls.setParentId("37");
		czls.setUrl("index.html#!/111");
		czls.setChildMenus(null);
		xtsz1List.add(czls);
		// 访问日志
		Menu fwrz = new Menu();
		fwrz.setHomePage("");
		fwrz.setId("40");
		fwrz.setLevel("3");
		fwrz.setMenuId("112");
		fwrz.setMenuName("访问日志");
		fwrz.setParentId("37");
		fwrz.setUrl("index.html#!/112");
		fwrz.setChildMenus(null);
		xtsz1List.add(fwrz);
		// 设置子节点
		xtsz.setChildMenus(xtszList);
		xtsz1.setChildMenus(xtsz1List);
		xtglList.add(xtsz);
		xtglList.add(xtsz1);
		xtgl.setChildMenus(xtglList);
		menuList.add(xtgl);
		return menuList;
	}

}
